import axios from 'axios'

/**
 * API 请求基础配置
 */
const api = axios.create({
  baseURL: 'http://localhost:9001/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

/**
 * 请求拦截器
 */
api.interceptors.request.use(
  config => {
    // 可以在这里添加认证信息等
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

/**
 * 响应拦截器
 */
api.interceptors.response.use(
  response => {
    // 直接返回响应数据
    return response.data
  },
  error => {
    // 统一处理错误
    console.error('API请求错误:', error)
    return Promise.reject(error)
  }
)

/**
 * 知识库相关 API
 */
export const knowledgeApi = {
  /**
   * 获取知识库列表
   * @returns {Promise} 知识库列表
   */
  getList() {
    return api.get('/knowledge/list')
  },
  
  /**
   * 搜索知识库
   * @param {String} name 知识库名称（模糊搜索）
   * @returns {Promise} 搜索结果
   */
  search(name) {
    return api.get('/knowledge/search', { params: { name } })
  },
  
  /**
   * 获取知识库详情
   * @param {Number} id 知识库ID
   * @returns {Promise} 知识库详情
   */
  getDetail(id) {
    return api.get('/knowledge/detail', { params: { id } })
  },
  
  /**
   * 创建知识库
   * @param {Object} data 知识库数据
   * @returns {Promise} 创建结果
   */
  create(data) {
    return api.post('/knowledge/create', data)
  },
  
  /**
   * 更新知识库
   * @param {Object} data 知识库数据
   * @returns {Promise} 更新结果
   */
  update(data) {
    return api.put('/knowledge/update', data)
  },
  
  /**
   * 删除知识库
   * @param {Number} id 知识库ID
   * @returns {Promise} 删除结果
   */
  delete(id) {
    return api.delete('/knowledge/delete', { params: { id } })
  },
  
  /**
   * 保存知识库Excalidraw画板数据
   * @param {Number} id 知识库ID
   * @param {String} excalidraw Excalidraw画板数据
   * @returns {Promise} 保存结果
   */
  saveExcalidraw(id, excalidraw) {
    return api.put('/knowledge/saveExcalidraw', { id, excalidraw })
  },
  
  /**
   * 获取知识库Excalidraw画板数据
   * @param {Number} id 知识库ID
   * @returns {Promise} Excalidraw画板数据
   */
  getExcalidraw(id) {
    return api.get('/knowledge/getExcalidraw', { params: { id } })
  },
  
  /**
   * 上传Excalidraw附件
   * @param {Number} knowledgeId 知识库ID
   * @param {File} file 附件文件
   * @returns {Promise} 上传结果
   */
  uploadExcalidrawAttachment(knowledgeId, file) {
    const formData = new FormData()
    formData.append('knowledgeId', knowledgeId)
    formData.append('file', file)
    return api.post('/knowledge/uploadExcalidrawAttachment', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    })
  },
  
  /**
   * 获取Excalidraw附件列表
   * @param {Number} knowledgeId 知识库ID
   * @returns {Promise} 附件列表
   */
  getExcalidrawAttachments(knowledgeId) {
    return api.get('/knowledge/getExcalidrawAttachments', { params: { knowledgeId } })
  },
  
  /**
   * 删除Excalidraw附件
   * @param {Number} attachmentId 附件ID
   * @returns {Promise} 删除结果
   */
  deleteExcalidrawAttachment(attachmentId) {
    return api.delete('/knowledge/deleteExcalidrawAttachment', { params: { attachmentId } })
  }
}

/**
 * 导出 API 实例
 */
export default api